5.2 Unterabfragen in SQL – Am Beispiel
Wieder wollen wir uns einige einfache Beispiele ansehen. Wir beginnen mit der Anzeige von Nachname und Bruttogehalt des höchstbezahlten Mitarbeiters.
[1]SELECT name, bruttolohn
FROM tbl_mitarbeiter
WHERE bruttolohn = (SELECT MAX(bruttolohn)
FROM tbl_mitarbeiter)
Die Unterabfrage hat keine direkte Beziehung zur äußeren Abfrage. Die resultierenden
Ergebnisse der Unterabfrage dienen in Form einer Zwischentabelle nur als Eingabe
der äußeren Abfrage. In MySQL (< Version 4.1, welche noch keine Unterabfragen hat)
führen Sie diese Abfrage in zwei Schritten durch:
1. Mit einem SELECT
-Statement ermitteln Sie den höchsten Lohn in der Tabelle.
2. Mit diesem Wert stellen Sie die aktuelle Anfrage zusammen.
Eine andere Lösung besteht darin, alle Zeilen absteigend zu sortieren und nur die erste Zeile zu nehmen,
indem Sie die MySQL-spezifische LIMIT
-Klausel benutzen:
[1]SELECT name, bruttolohn
FROM tbl_mitarbeiter
ORDER BY bruttolohn DESC
LIMIT 1
ACHTUNG:
Wenn es mehrere MAX-Werte gibt zeigt die LIMIT-Lösung nur einen davon!
Im folgenden Beispiel sollen alle Mitarbeiter angezeigt werden, die weniger Lohn erhalten als den Durchschnittslohn:
[13]SELECT name, bruttolohn
FROM tbl_mitarbeiter
WHERE bruttolohn < (SELECT AVG(bruttolohn)
FROM tbl_mitarbeiter)